package model;
import java.io.Serializable;

import javax.persistence.*;

import org.apache.commons.codec.digest.DigestUtils;

import dto.UtenteDTO;
import util.Converter;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * The persistent class for the Utente database table.
 * 
 */
@Entity
@Table(name="Utente")
@NamedQueries({
	@NamedQuery(name=Utente.FIND_ALL,query="SELECT u FROM Utente u")
})
public class Utente implements Serializable {
	private static final long serialVersionUID = 1L;
	public static final String FIND_ALL = "Utente.findAll";
	
	@Id
	@Column(name = "email")
	private String email;
	private String password;
	private String nome;
	private String cognome;
	@Temporal(TemporalType.DATE)
	private Date data;
	private String luogoNascita;
	private String città;
	private String indirizzo;
	@Lob
	private String telefono;
	private boolean confermato;

	@ElementCollection(targetClass = Gruppi.class)
    @CollectionTable(name = "Gruppo_Utente",
                    joinColumns = @JoinColumn(name = "email"))
    @Enumerated(EnumType.STRING)
    @Column(name="gruppo")
    private List<Gruppi> gruppi;
	
	@OneToMany
	@JoinColumn(name="emailUtente")
	private List<PacchettoPersonale> pacchettiPersonali;
	
	@OneToMany
	@JoinColumn(name="emailUtente")
	private List<PacchettoPredefinito> pacchettiPredefiniti;
	
	@ManyToMany
	@JoinTable(
		name="Giftlist"
		, joinColumns={
			@JoinColumn(name="emailUtente", referencedColumnName="email")
			}
		, inverseJoinColumns={
			@JoinColumn(name="idElementoBase", referencedColumnName="idElementoBase")
			}
		)
	private List<ElementoBase> giftList;
	
	@OneToMany
	@JoinColumn(name="emailUtente")
	private List<Acquisto> acquisto;

	public Utente(){
		
	}
	
	public Utente(UtenteDTO user,boolean reg){
        this.email        = user.getEmail();
        this.password = DigestUtils.sha256Hex(user.getPassword() );
        this.nome    	= user.getNome();
        this.cognome     = user.getCognome();
        this.città = user.getCittà();
        this.data = user.getData();
        this.indirizzo = user.getIndirizzo();
        this.luogoNascita = user.getLuogoNascita();
        this.telefono = user.getTelefono();
        //this.pacchettiPersonali = Converter.convertPacchettiFromDTO(user.getPacchettiPersonali());

	}
	
	public Utente(UtenteDTO user) {
        this.email        = user.getEmail();
        this.password = user.getPassword();
        this.nome    	= user.getNome();
        this.cognome     = user.getCognome();
        this.città = user.getCittà();
        this.data = user.getData();
        this.indirizzo = user.getIndirizzo();
        this.luogoNascita = user.getLuogoNascita();
        this.telefono = user.getTelefono();
        this.pacchettiPersonali = Converter.convertPacchettiFromDTO(user.getPacchettiPersonali());
        this.pacchettiPredefiniti = Converter.convertPacchettiPredFromDTO(user.getPacchettiPredefiniti());
        List<Gruppi> l = new ArrayList<Gruppi>();
        if(user.getGruppi().get(0).name()=="Utenti")
        	l.add(Gruppi.Utenti);
        else if(user.getGruppi().get(0).name()=="Impiegati")
        	l.add(Gruppi.Impiegati);
        else l.add(Gruppi.Pending);
        this.gruppi = l;
        this.giftList = Converter.convertElementiFromDTO(user.getGiftList());
        this.acquisto = Converter.convertAcquistiFromDTO(user.getAcquisto());
	}

	public String getCittà() {
		return this.città;
	}

	public void setCittà(String città) {
		this.città = città;
	}

	public String getCognome() {
		return this.cognome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome;
	}

	public boolean getConfermato() {
		return this.confermato;
	}

	public void setConfermato(boolean confermato) {
		this.confermato = confermato;
	}

	public Date getData() {
		return this.data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getIndirizzo() {
		return this.indirizzo;
	}

	public void setIndirizzo(String indirizzo) {
		this.indirizzo = indirizzo;
	}

	public String getLuogoNascita() {
		return this.luogoNascita;
	}

	public void setLuogoNascita(String luogoNascita) {
		this.luogoNascita = luogoNascita;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getTelefono() {
		return this.telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	public List<Gruppi> getGruppi() {
		return gruppi;
	}

	public void setGruppi(List<Gruppi> gruppi) {
		this.gruppi = gruppi;
	}

	public List<PacchettoPersonale> getPacchettiPersonali() {
		return pacchettiPersonali;
	}

	public void setPacchettiPersonali(List<PacchettoPersonale> pacchettiPersonali) {
		this.pacchettiPersonali = pacchettiPersonali;
	}

	public List<ElementoBase> getGiftList() {
		return giftList;
	}

	public void setGiftList(List<ElementoBase> giftList) {
		this.giftList = giftList;
	}

	public List<Acquisto> getAcquisto() {
		return acquisto;
	}

	public void setAcquisto(List<Acquisto> acquisto) {
		this.acquisto = acquisto;
	}

	public List<PacchettoPredefinito> getPacchettiPredefiniti() {
		return pacchettiPredefiniti;
	}

	public void setPacchettiPredefiniti(
			List<PacchettoPredefinito> pacchettiPredefiniti) {
		this.pacchettiPredefiniti = pacchettiPredefiniti;
	}
	
	
}